LyoKICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgogKgogKglDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDAyCiAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KICoKICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogKDEyLzEyLzIwMDIpIGdhbmVzaAogKiAJQWRkZWQgc3VwcG9ydCBmb3IgcHJhY3RpY2FsbHkgYWxsIGRldmljZXMgc3VwcG9ydGVkIGJ5IEFjdGl2ZVN5bmMKICogCW9uIFdpbmRvd3MuIFRoYW5rcyB0byBXZXMgQ2lsbGRoYWlyZSA8YmlsbHlib2Jqb2VoZW5yeWJvYkBob3RtYWlsLmNvbT4uCiAqCiAqICgyNi8xMS8yMDAyKSBnYW5lc2gKICogCUFkZGVkIGluc21vZCBvcHRpb25zIHRvIHNwZWNpZnkgcHJvZHVjdCBhbmQgdmVuZG9yIGlkLgogKiAJVXNlIG1vZHByb2JlIGlwYXEgdmVuZG9yPTB4Zm9vIHByb2R1Y3Q9MHhiYXIKICoKICogKDI2LzcvMjAwMikgZ2FuZXNoCiAqIAlGaXhlZCB1cCBicm9rZW4gZXJyb3IgaGFuZGxpbmcgaW4gaXBhcV9vcGVuLiBSZXRyeSB0aGUgImtpY2tzdGFydCIKICogCXBhY2tldCBtdWNoIGhhcmRlciAtIHRoaXMgZHJhc3RpY2FsbHkgcmVkdWNlcyBjb25uZWN0aW9uIGZhaWx1cmVzLgogKgogKiAoMzAvNC8yMDAyKSBnYW5lc2gKICogCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDYXNpbyBFTTUwMC4gQ29tcGxldGVseSB1bnRlc3RlZC4gVGhhbmtzCiAqIAl0byBpbmZvIGZyb20gTmF0aGFuIDx3ZmlsYXJkb0BmdXNlLm5ldD4KICoKICogKDE5LzMvMjAwMikgZ2FuZXNoCiAqCURvbid0IHN1Ym1pdCB1cmJzIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CiAqCWluIDIuNS54LgogKgogKiAoOC8zLzIwMDIpIGdhbmVzaAogKiAJVGhlIGlwYXEgc29tZXRpbWVzIGVtaXRzIGEgJ1wwJyBiZWZvcmUgdGhlIENMSUVOVCBzdHJpbmcuIEF0IHRoaXMKICogCXBvaW50IG9mIHRpbWUsIHRoZSBwcHAgbGRpc2MgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdHR5LCBzbwogKiAJbl90dHkgZWNob2VzICJeICIgdG8gdGhlIGlwYXEsIHdoaWNoIG1lc3NlcyB1cCB0aGUgY2hhdC4gSW4gMi41LjYtcHJlMgogKiAJdGhpcyBjYXVzZXMgYSBwYW5pYyBiZWNhdXNlIGVjaG9fY2hhcigpIHRyaWVzIHRvIHNsZWVwIGluIGludGVycnVwdAogKiAJY29udGV4dC4KICogCVRoZSBmaXggaXMgdG8gdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHRoYXQgdGhpcyBpcyBhIHJhdyBkZXZpY2Ugc28gdGhhdAogKiAJZWNob2luZyBpcyBzdXBwcmVzc2VkLiBUaGFua3MgdG8gTHlsZSBMaW5kaG9sbSBmb3IgYSBkZXRhaWxlZCBidWcKICogCXJlcG9ydC4KICoKICogKDI1LzIvMjAwMikgZ2FuZXNoCiAqIAlBZGRlZCBzdXBwb3J0IGZvciB0aGUgSFAgSm9ybmFkYSA1NDggYW5kIDU2OC4gQ29tcGxldGVseSB1bnRlc3RlZC4KICogCVRoYW5rcyB0byBpbmZvIGZyb20gSGVhdGggUm9iaW5zb24gYW5kIEFyaWVoIERhdmlkb2ZmLgogKi8KCiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiNpbmNsdWRlIDxsaW51eC90dHkuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgojaW5jbHVkZSA8bGludXgvdXNiLmg+CiNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiNpbmNsdWRlICJpcGFxLmgiCgojZGVmaW5lIEtQX1JFVFJJRVMJMTAwCgovKgogKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAqLwoKI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNSIKI2RlZmluZSBEUklWRVJfQVVUSE9SICJHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4iCiNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQb2NrZXRQQyBQREEgZHJpdmVyIgoKc3RhdGljIF9fdTE2IHByb2R1Y3QsIHZlbmRvcjsKc3RhdGljIGludCBkZWJ1ZzsKc3RhdGljIGludCBjb25uZWN0X3JldHJpZXMgPSBLUF9SRVRSSUVTOwpzdGF0aWMgaW50IGluaXRpYWxfd2FpdDsKCi8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGlwYXEgKi8Kc3RhdGljIGludCAgaXBhcV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CnN0YXRpYyB2b2lkIGlwYXFfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKc3RhdGljIGludCAgaXBhcV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCgkJICAgICAgIGludCBjb3VudCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkJICAgaW50IGNvdW50KTsKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKc3RhdGljIHZvaWQgaXBhcV9kZXN0cm95X2xpc3RzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwoKCnN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcGFxX2lkX3RhYmxlIFtdID0gewoJLyogVGhlIGZpcnN0IGVudHJ5IGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnNtb2Qtc3BlY2lmaWVkIGRldmljZSAqLwoJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LAoJeyBVU0JfREVWSUNFKDB4MDEwNCwgMHgwMEJFKSB9LCAvKiBTb2NrZXQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MTAxNikgfSwgLyogSFAgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MTExNikgfSwgLyogSFAgVVNCIFN5bmMgMTYxMSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjEyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MjExNikgfSwgLyogSFAgVVNCIFN5bmMgMTYyMSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MzExNikgfSwgLyogSFAgVVNCIFN5bmMgMTYzMSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NDExNikgfSwgLyogSFAgVVNCIFN5bmMgMTY0MSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NTExNikgfSwgLyogSFAgVVNCIFN5bmMgMTY1MSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDUpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ2KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENykgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDgwMjQpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0M0UsIDB4OUMwMSkgfSwgLyogTEdFIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDAwQ0UpIH0sIC8qIE1pY3Jvc29mdCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDMyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0QpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDREKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDdBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0UpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRENykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEQ4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEUxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEVBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMDMpIH0sIC8qIENvbXBhcSBpUEFRIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMzIpIH0sIC8qIENvbXBhcSBpUEFRIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEE0LCAweDAwMTQpIH0sIC8qIEhpdGFjaGkgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMSkgfSwgLyogVVNCIFN5bmMgMDMwMSAqLwoJeyBVU0JfREVWSUNFKDB4MDRBRCwgMHgwMzAyKSB9LCAvKiBVU0IgU3luYyAwMzAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDMpIH0sIC8qIFVTQiBTeW5jIDAzMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0QzUsIDB4MTA1OCkgfSwgLyogRlVKSVRTVSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDc5KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNERBLCAweDI1MDApIH0sIC8qIFBhbmFzb25pYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRERCwgMHg5MTAyKSB9LCAvKiBTSEFSUCBXUzAwM1NIIFVTQiBNb2RlbSAqLwoJeyBVU0JfREVWSUNFKDB4MDRERCwgMHg5MTIxKSB9LCAvKiBTSEFSUCBXUzAwNFNIIFVTQiBNb2RlbSAqLwoJeyBVU0JfREVWSUNFKDB4MDRERCwgMHg5MTIzKSB9LCAvKiBTSEFSUCBXUzAwN1NIIFVTQiBNb2RlbSAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAwKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDEpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMikgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAzKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDQpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTMpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE1KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTkpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjFCKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYyRSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzApIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjMyKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAxMSkgfSwgLyogSlZDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEYxLCAweDMwMTIpIH0sIC8qIEpWQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMxKSB9LCAvKiBjMTAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzIpIH0sIC8qIGMyMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMSkgfSwgLyogQWNlciBuMTAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMikgfSwgLyogQWNlciBuMjAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMykgfSwgLyogQWNlciBuMzAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1MzYsIDB4MDFBMCkgfSwgLyogSEhQIFBEVCAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgwRUQ5KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNSAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI3KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNiAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI5KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNyAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJCKSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzOCAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJFKSB9LCAvKiBWaWV3U29uaWMgUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjEpIH0sIC8qIFZpZXdTb25pYyBDb21tdW5pY2F0b3IgUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjIpIH0sIC8qIFZpZXdTb25pYyBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjMpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgVjMwICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDApIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAxKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAxICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDIpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMykgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA0KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA0ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDUpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDUgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwNikgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwNiAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA3KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA3ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDgpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDggKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwOSkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwOSAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDBBKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDBBICovCgl7IFVTQl9ERVZJQ0UoMHgwNjdFLCAweDEwMDEpIH0sIC8qIEludGVybWVjIE1vYmlsZSBDb21wdXRlciAqLwoJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAxKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAxICovCgl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDIpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMykgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzAwKSB9LCAvKiBUT1NISUJBIFVTQiBTeW5jIDA3MDAgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTMxMCAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA2KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNzQwICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDcpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzMzAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDgpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzNTCgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDkpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NTAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MEEpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU0MDAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MEIpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU4MDAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTRCLCAweDAwMDEpIH0sIC8qIExpbmt1cCBTeXN0ZW1zIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjUpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NSAqLwoJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY2KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjYgKi8KCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NykgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY3ICovCgl7IFVTQl9ERVZJQ0UoMHgwOTYxLCAweDAwMTApIH0sIC8qIFBvcnRhdGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwOTlFLCAweDAwNTIpIH0sIC8qIFRyaW1ibGUgR2VvRXhwbG9yZXIgKi8KCXsgVVNCX0RFVklDRSgweDA5OUUsIDB4NDAwMCkgfSwgLyogVERTIERhdGEgQ29sbGVjdG9yICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDApIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4NDIwMSkgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMEYpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4OTIwMCkgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDAwQ0UpIH0sIC8qIEhUQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTExKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTREKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUwKSB9LCAvKiBIVEMgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3MSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3QSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0MpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3RCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0YpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBCQ0UpIH0sIC8qICJIaWdoIFRlY2ggQ29tcHV0ZXIgQ29ycCIgKi8KCXsgVVNCX0RFVklDRSgweDBCRjgsIDB4MTAwMSkgfSwgLyogRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEM0NCwgMHgwM0EyKSB9LCAvKiBNb3Rvcm9sYSBpREVOIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDBDOEUsIDB4NjAwMCkgfSwgLyogQ2Vzc2NvbSBMdXhpYW4gU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwQ0FELCAweDkwMDEpIH0sIC8qIE1vdG9yb2xhIFBvd2VyUGFkIFBvY2tldCBQQ6BEZXZpY2UgKi8KCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRjk4LCAweDAyMDEpIH0sIC8qIEN5YmVyYmFuayBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHgzMDAxKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDIpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMykgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHg0MDAxKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAwQ0UpIH0sIC8qIEUtVEVOIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAzMDApIH0sIC8qIEUtVEVOIFAzWFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA1MDApIH0sIC8qIEUtVEVOIFA1WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA2MDApIH0sIC8qIEUtVEVOIFA2WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA3MDApIH0sIC8qIEUtVEVOIFA3WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMTE0LCAweDAwMDEpIH0sIC8qIFBzaW9uIFRla2xvZ2l4IFN5bmMgNzUzeCAqLwoJeyBVU0JfREVWSUNFKDB4MTExNCwgMHgwMDA0KSB9LCAvKiBQc2lvbiBUZWtsb2dpeCBTeW5jIG5ldEJvb2tQcm8gKi8KCXsgVVNCX0RFVklDRSgweDExMTQsIDB4MDAwNikgfSwgLyogUHNpb24gVGVrbG9naXggU3luYyA3NTI1ICovCgl7IFVTQl9ERVZJQ0UoMHgxMTgyLCAweDEzODgpIH0sIC8qIFZFUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MTFEOSwgMHgxMDAyKSB9LCAvKiBSdWdnZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMykgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDEpIH0sIC8qIFVTQiBTeW5jIDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDIpIH0sIC8qIFVTQiBTeW5jIDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA2MDEpIH0sIC8qIEFza2V5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMDQpIH0sIC8qIE1vdG9yb2xhIE1QeDIwMCBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMTQpIH0sIC8qIE1vdG9yb2xhIE1QYyBHU00gKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIyNCkgfSwgLyogTW90b3JvbGEgTVB4MjIwIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIzNCkgfSwgLyogTW90b3JvbGEgTVBjIENETUEgKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDI0NCkgfSwgLyogTW90b3JvbGEgTVB4MTAwIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDExQykgfSwgLyogTWlvIERpZ2lXYWxrZXIgUFBDIFN0cm9uZ0FSTSAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMzI2KSB9LCAvKiBNaW8gRGlnaVdhbGtlciAzMzggKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDQyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA0M0EpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jIDUyOCAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA3MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBCMUMpIH0sIC8qIEdlbmVyaWMgUFBDIFN0cm9uZ0FSTSAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRTNBKSB9LCAvKiBHZW5lcmljIFBQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRjFDKSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGM0EpIH0sIC8qIEdlbmVyaWMgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgxMzI2KSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDE5MUMpIH0sIC8qIFlBS1VNTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgyMzI2KSB9LCAvKiBWb2JpcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgzMzI2KSB9LCAvKiBNRURJT04gV2lub2R3cyBNb2JsZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzcwOCwgMHgyMENFKSB9LCAvKiBMZWdlbmQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDM3MDgsIDB4MjFDRSkgfSwgLyogTGVub3ZvIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTEpIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MDApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MTApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDEpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAyKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMykgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDQpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA1KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDcpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA4KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0NTA1LCAweDAwMTApIH0sIC8qIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDVFMDQsIDB4Q0UwMCkgfSwgLyogU0FHRU0gV2lyZWxlc3MgQXNzaXN0YW50ICovCgl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCn07CgpNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlwYXFfaWRfdGFibGUpOwoKc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwYXFfZHJpdmVyID0gewoJLm5hbWUgPQkJImlwYXEiLAoJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAoJLmlkX3RhYmxlID0JaXBhcV9pZF90YWJsZSwKCS5ub19keW5hbWljX2lkID0gCTEsCn07CgoKLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBDb21wYXEgaVBBUSAqLwpzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGlwYXFfZGV2aWNlID0gewoJLmRyaXZlciA9IHsKCQkub3duZXIgPQlUSElTX01PRFVMRSwKCQkubmFtZSA9CQkiaXBhcSIsCgl9LAoJLmRlc2NyaXB0aW9uID0JCSJQb2NrZXRQQyBQREEiLAoJLmlkX3RhYmxlID0JCWlwYXFfaWRfdGFibGUsCgkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCgkubnVtX2J1bGtfaW4gPQkJMSwKCS5udW1fYnVsa19vdXQgPQkJMSwKCS5udW1fcG9ydHMgPQkJMSwKCS5vcGVuID0JCQlpcGFxX29wZW4sCgkuY2xvc2UgPQkJaXBhcV9jbG9zZSwKCS5hdHRhY2ggPQkJaXBhcV9zdGFydHVwLAoJLnNodXRkb3duID0JCWlwYXFfc2h1dGRvd24sCgkud3JpdGUgPQkJaXBhcV93cml0ZSwKCS53cml0ZV9yb29tID0JCWlwYXFfd3JpdGVfcm9vbSwKCS5jaGFyc19pbl9idWZmZXIgPQlpcGFxX2NoYXJzX2luX2J1ZmZlciwKCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywKCS53cml0ZV9idWxrX2NhbGxiYWNrID0JaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrLAp9OwoKc3RhdGljIHNwaW5sb2NrX3QJd3JpdGVfbGlzdF9sb2NrOwpzdGF0aWMgaW50CQlieXRlc19pbjsKc3RhdGljIGludAkJYnl0ZXNfb3V0OwoKc3RhdGljIGludCBpcGFxX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCnsKCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2OwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3Q7CglpbnQJCQlpLCByZXN1bHQgPSAwOwoJaW50CQkJcmV0cmllcyA9IGNvbm5lY3RfcmV0cmllczsKCglkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKCglieXRlc19pbiA9IDA7CglieXRlc19vdXQgPSAwOwoJcHJpdiA9IChzdHJ1Y3QgaXBhcV9wcml2YXRlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwoJaWYgKHByaXYgPT0gTlVMTCkgewoJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKCQlyZXR1cm4gLUVOT01FTTsKCX0KCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKCXByaXYtPmFjdGl2ZSA9IDA7Cglwcml2LT5xdWV1ZV9sZW4gPSAwOwoJcHJpdi0+ZnJlZV9sZW4gPSAwOwoJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnF1ZXVlKTsKCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlbGlzdCk7CgoJZm9yIChpID0gMDsgaSA8IFVSQkRBVEFfUVVFVUVfTUFYIC8gUEFDS0VUX1NJWkU7IGkrKykgewoJCXBrdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3BhY2tldCksIEdGUF9LRVJORUwpOwoJCWlmIChwa3QgPT0gTlVMTCkgewoJCQlnb3RvIGVub21lbTsKCQl9CgkJcGt0LT5kYXRhID0ga21hbGxvYyhQQUNLRVRfU0laRSwgR0ZQX0tFUk5FTCk7CgkJaWYgKHBrdC0+ZGF0YSA9PSBOVUxMKSB7CgkJCWtmcmVlKHBrdCk7CgkJCWdvdG8gZW5vbWVtOwoJCX0KCQlwa3QtPmxlbiA9IDA7CgkJcGt0LT53cml0dGVuID0gMDsKCQlJTklUX0xJU1RfSEVBRCgmcGt0LT5saXN0KTsKCQlsaXN0X2FkZCgmcGt0LT5saXN0LCAmcHJpdi0+ZnJlZWxpc3QpOwoJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOwoJfQoKCS8qCgkgKiBGb3JjZSBsb3cgbGF0ZW5jeSBvbi4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHB1c2ggZGF0YSB0byB0aGUgbGluZQoJICogZGlzY2lwbGluZSBpbnN0ZWFkIG9mIHF1ZXVlaW5nLgoJICovCgoJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7Cglwb3J0LT50dHktPnJhdyA9IDE7Cglwb3J0LT50dHktPnJlYWxfcmF3ID0gMTsKCgkvKgoJICogTG9zZSB0aGUgc21hbGwgYnVmZmVycyB1c2JzZXJpYWwgcHJvdmlkZXMuIE1ha2UgbGFyZ2VyIG9uZXMuCgkgKi8KCglrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CglrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOwoJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKFVSQkRBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CglpZiAocG9ydC0+YnVsa19pbl9idWZmZXIgPT0gTlVMTCkgewoJCWdvdG8gZW5vbWVtOwoJfQoJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhVUkJEQVRBX1NJWkUsIEdGUF9LRVJORUwpOwoJaWYgKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9PSBOVUxMKSB7CgkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwoJCWdvdG8gZW5vbWVtOwoJfQoJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfaW5fYnVmZmVyOwoJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT5idWxrX291dF9idWZmZXI7Cglwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFVSQkRBVEFfU0laRTsKCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7CgkKCW1zbGVlcCgxMDAwKmluaXRpYWxfd2FpdCk7CgoJLyoKCSAqIFNlbmQgb3V0IGNvbnRyb2wgbWVzc2FnZSBvYnNlcnZlZCBpbiB3aW45OCBzbmlmZnMuIE5vdCBzdXJlIHdoYXQKCSAqIGl0IGRvZXMsIGJ1dCBmcm9tIGVtcGlyaWNhbCBvYnNlcnZhdGlvbnMsIGl0IHNlZW1zIHRoYXQgdGhlIGRldmljZQoJICogd2lsbCBzdGFydCB0aGUgY2hhdCBzZXF1ZW5jZSBvbmNlIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyBnZXRzCgkgKiB0aHJvdWdoLiBTaW5jZSB0aGlzIGhhcyBhIHJlYXNvbmFibHkgaGlnaCBmYWlsdXJlIHJhdGUsIHdlIHJldHJ5CgkgKiBzZXZlcmFsIHRpbWVzLgoJICovCgoJd2hpbGUgKHJldHJpZXMtLSkgewoJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKCQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIDB4MjIsIDB4MjEsCgkJCQkweDEsIDAsIE5VTEwsIDAsIDEwMCk7CgkJaWYgKCFyZXN1bHQpCgkJCWJyZWFrOwoKCQltc2xlZXAoMTAwMCk7Cgl9CgoJaWYgKCFyZXRyaWVzICYmIHJlc3VsdCkgewoJCWVycigiJXMgLSBmYWlsZWQgZG9pbmcgY29udHJvbCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLAoJCSAgICByZXN1bHQpOwoJCWdvdG8gZXJyb3I7Cgl9CgoJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKCQkgICAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CgoJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwoJaWYgKHJlc3VsdCkgewoJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CgkJZ290byBlcnJvcjsKCX0KCglyZXR1cm4gMDsKCmVub21lbToKCXJlc3VsdCA9IC1FTk9NRU07CgllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fRlVOQ1RJT05fXyk7CmVycm9yOgoJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOwoJa2ZyZWUocHJpdik7CglyZXR1cm4gcmVzdWx0Owp9CgoKc3RhdGljIHZvaWQgaXBhcV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCglkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKCQkJIAoJLyoKCSAqIHNodXQgZG93biBidWxrIHJlYWQgYW5kIHdyaXRlCgkgKi8KCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOwoJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKCWlwYXFfZGVzdHJveV9saXN0cyhwb3J0KTsKCWtmcmVlKHByaXYpOwoJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOwoKCS8qIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gc2VlIHNvbWUgc3RhdGlzdGljcyBpbiB5b3VyIHN5c2xvZyAqLwoJLyogaW5mbyAoIkJ5dGVzIEluID0gJWQgIEJ5dGVzIE91dCA9ICVkIiwgYnl0ZXNfaW4sIGJ5dGVzX291dCk7ICovCn0KCnN0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCnsKCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7Cgl1bnNpZ25lZCBjaGFyCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwoJaW50CQkJcmVzdWx0OwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoKCWlmICh1cmItPnN0YXR1cykgewoJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CgkJcmV0dXJuOwoJfQoKCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwoKCXR0eSA9IHBvcnQtPnR0eTsKCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CgkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwoJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwoJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CgkJYnl0ZXNfaW4gKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwoJfQoKCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCgkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCgkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCgkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwoJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwoJaWYgKHJlc3VsdCkKCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CglyZXR1cm47Cn0KCnN0YXRpYyBpbnQgaXBhcV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCgkJICAgICAgIGludCBjb3VudCkKewoJY29uc3QgdW5zaWduZWQgY2hhcgkqY3VycmVudF9wb3NpdGlvbiA9IGJ1ZjsKCWludAkJCWJ5dGVzX3NlbnQgPSAwOwoJaW50CQkJdHJhbnNmZXJfc2l6ZTsKCglkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKCgl3aGlsZSAoY291bnQgPiAwKSB7CgkJdHJhbnNmZXJfc2l6ZSA9IG1pbihjb3VudCwgUEFDS0VUX1NJWkUpOwoJCWlmIChpcGFxX3dyaXRlX2J1bGsocG9ydCwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSkpIHsKCQkJYnJlYWs7CgkJfQoJCWN1cnJlbnRfcG9zaXRpb24gKz0gdHJhbnNmZXJfc2l6ZTsKCQlieXRlc19zZW50ICs9IHRyYW5zZmVyX3NpemU7CgkJY291bnQgLT0gdHJhbnNmZXJfc2l6ZTsKCQlieXRlc19vdXQgKz0gdHJhbnNmZXJfc2l6ZTsKCX0KCglyZXR1cm4gYnl0ZXNfc2VudDsKfSAKCnN0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkJICAgaW50IGNvdW50KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3QgPSBOVUxMOwoJaW50CQkJcmVzdWx0ID0gMDsKCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwoKCWlmIChwcml2LT5mcmVlX2xlbiA8PSAwKSB7CgkJZGJnKCIlcyAtIHdlJ3JlIHN0dWZmZWQiLCBfX0ZVTkNUSU9OX18pOwoJCXJldHVybiAtRUFHQUlOOwoJfQoKCXNwaW5fbG9ja19pcnFzYXZlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCWlmICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZWxpc3QpKSB7CgkJcGt0ID0gbGlzdF9lbnRyeShwcml2LT5mcmVlbGlzdC5uZXh0LCBzdHJ1Y3QgaXBhcV9wYWNrZXQsIGxpc3QpOwoJCWxpc3RfZGVsKCZwa3QtPmxpc3QpOwoJCXByaXYtPmZyZWVfbGVuIC09IFBBQ0tFVF9TSVpFOwoJfQoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CglpZiAocGt0ID09IE5VTEwpIHsKCQlkYmcoIiVzIC0gd2UncmUgc3R1ZmZlZCIsIF9fRlVOQ1RJT05fXyk7CgkJcmV0dXJuIC1FQUdBSU47Cgl9CgoJbWVtY3B5KHBrdC0+ZGF0YSwgYnVmLCBjb3VudCk7Cgl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHBrdC0+ZGF0YSk7CgoJcGt0LT5sZW4gPSBjb3VudDsKCXBrdC0+d3JpdHRlbiA9IDA7CglzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CglsaXN0X2FkZF90YWlsKCZwa3QtPmxpc3QsICZwcml2LT5xdWV1ZSk7Cglwcml2LT5xdWV1ZV9sZW4gKz0gY291bnQ7CglpZiAocHJpdi0+YWN0aXZlID09IDApIHsKCQlwcml2LT5hY3RpdmUgPSAxOwoJCWlwYXFfd3JpdGVfZ2F0aGVyKHBvcnQpOwoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CgkJaWYgKHJlc3VsdCkgewoJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCQl9Cgl9IGVsc2UgewoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJfQoJcmV0dXJuIHJlc3VsdDsKfQoKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CglpbnQJCQljb3VudCwgcm9vbTsKCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0LCAqdG1wOwoJc3RydWN0IHVyYgkJKnVyYiA9IHBvcnQtPndyaXRlX3VyYjsKCglyb29tID0gVVJCREFUQV9TSVpFOwoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+cXVldWUsIGxpc3QpIHsKCQljb3VudCA9IG1pbihyb29tLCAoaW50KShwa3QtPmxlbiAtIHBrdC0+d3JpdHRlbikpOwoJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIChVUkJEQVRBX1NJWkUgLSByb29tKSwKCQkgICAgICAgcGt0LT5kYXRhICsgcGt0LT53cml0dGVuLCBjb3VudCk7CgkJcm9vbSAtPSBjb3VudDsKCQlwa3QtPndyaXR0ZW4gKz0gY291bnQ7CgkJcHJpdi0+cXVldWVfbGVuIC09IGNvdW50OwoJCWlmIChwa3QtPndyaXR0ZW4gPT0gcGt0LT5sZW4pIHsKCQkJbGlzdF9tb3ZlKCZwa3QtPmxpc3QsICZwcml2LT5mcmVlbGlzdCk7CgkJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOwoJCX0KCQlpZiAocm9vbSA9PSAwKSB7CgkJCWJyZWFrOwoJCX0KCX0KCgljb3VudCA9IFVSQkRBVEFfU0laRSAtIHJvb207Cgl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIHNlcmlhbC0+ZGV2LCAKCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCgkJICAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2ssCgkJICAgICAgcG9ydCk7CglyZXR1cm47Cn0KCnN0YXRpYyB2b2lkIGlwYXFfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQp7CglzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CglpbnQJCQlyZXN1bHQ7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgkKCWlmICh1cmItPnN0YXR1cykgewoJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwoJCXJldHVybjsKCX0KCglzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CglpZiAoIWxpc3RfZW1wdHkoJnByaXYtPnF1ZXVlKSkgewoJCWlwYXFfd3JpdGVfZ2F0aGVyKHBvcnQpOwoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CgkJaWYgKHJlc3VsdCkgewoJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCQl9Cgl9IGVsc2UgewoJCXByaXYtPmFjdGl2ZSA9IDA7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7Cgl9CgoJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocG9ydCk7Cn0KCnN0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CgoJZGJnKCIlcyAtIGZyZWVsZW4gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPmZyZWVfbGVuKTsKCXJldHVybiBwcml2LT5mcmVlX2xlbjsKfQoKc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoKCWRiZygiJXMgLSBxdWV1ZWxlbiAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+cXVldWVfbGVuKTsKCXJldHVybiBwcml2LT5xdWV1ZV9sZW47Cn0KCnN0YXRpYyB2b2lkIGlwYXFfZGVzdHJveV9saXN0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3QsICp0bXA7CgoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+cXVldWUsIGxpc3QpIHsKCQlrZnJlZShwa3QtPmRhdGEpOwoJCWtmcmVlKHBrdCk7Cgl9CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGt0LCB0bXAsICZwcml2LT5mcmVlbGlzdCwgbGlzdCkgewoJCWtmcmVlKHBrdC0+ZGF0YSk7CgkJa2ZyZWUocGt0KTsKCX0KfQoKCnN0YXRpYyBpbnQgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCnsKCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwoJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CgkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKCQlyZXR1cm4gLUVOT0RFVjsKCX0KCXJldHVybiB1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOwp9CgpzdGF0aWMgdm9pZCBpcGFxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCnsKCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwp9CgpzdGF0aWMgaW50IF9faW5pdCBpcGFxX2luaXQodm9pZCkKewoJaW50IHJldHZhbDsKCXNwaW5fbG9ja19pbml0KCZ3cml0ZV9saXN0X2xvY2spOwoJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaXBhcV9kZXZpY2UpOwoJaWYgKHJldHZhbCkgCgkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKCWlmICh2ZW5kb3IpIHsKCQlpcGFxX2lkX3RhYmxlWzBdLmlkVmVuZG9yID0gdmVuZG9yOwoJCWlwYXFfaWRfdGFibGVbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKCX0KCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaXBhcV9kcml2ZXIpOwoJaWYgKHJldHZhbCkKCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CgkJICAKCXJldHVybiAwOwpmYWlsZWRfdXNiX3JlZ2lzdGVyOgoJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcGFxX2RldmljZSk7CmZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgoJcmV0dXJuIHJldHZhbDsKfQoKCnN0YXRpYyB2b2lkIF9fZXhpdCBpcGFxX2V4aXQodm9pZCkKewoJdXNiX2RlcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwp9CgoKbW9kdWxlX2luaXQoaXBhcV9pbml0KTsKbW9kdWxlX2V4aXQoaXBhcV9leGl0KTsKCk1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOwpNT0RVTEVfTElDRU5TRSgiR1BMIik7Cgptb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cgptb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOwpNT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFZlbmRvciIpOwoKbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7Ck1PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFByb2R1Y3QiKTsKCm1vZHVsZV9wYXJhbShjb25uZWN0X3JldHJpZXMsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKTU9EVUxFX1BBUk1fREVTQyhjb25uZWN0X3JldHJpZXMsICJNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0IHJldHJpZXMgKG9uZSBzZWNvbmQgZWFjaCkiKTsKCm1vZHVsZV9wYXJhbShpbml0aWFsX3dhaXQsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKTU9EVUxFX1BBUk1fREVTQyhpbml0aWFsX3dhaXQsICJUaW1lIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb25uZWN0aW9uIChpbiBzZWNvbmRzKSIpOwo=